<?php
class AdminIdentity extends CUserIdentity
{
    private $_id, $_user;
	
    public function authenticate()
    {
		$result = Users::getInstance()->authenticate($this->username, $this->password);
		switch ($result){
			case Users::AUTH_ERROR_USERNAME_INVALID:
			{
				$this->errorCode=self::ERROR_USERNAME_INVALID;
				/*write log*/
				Logs::getInstance()->insert(array(
					'user_ip' => Utils::getIp(),
					'user_agent' => $_SERVER['HTTP_USER_AGENT'],
					'log_action' => 'ADMINCP_LOGIN_FAIL',
					'log_message' => Utils::getIp().' đăng nhập thất bại vì tài khoản '.$this->username.' không tồn tại'
				));
				break;
			}
			case Users::AUTH_ERROR_ACCOUNT_LOCKED:
			{
				$this->errorCode=MSG_ERROR_ACCOUNT_LOCKED;
				/*write log*/
				Logs::getInstance()->insert(array(
					'user_ip' => Utils::getIp(),
					'user_agent' => $_SERVER['HTTP_USER_AGENT'],
					'log_action' => 'ADMINCP_LOGIN_FAIL',				
					'log_message' => $this->username.' đăng nhập thất bại do tài khoản bị khóa'
				));
				break;
			}
			case Users::AUTH_ERROR_PASSWORD_INVALID:
			{
				 $this->errorCode=self::ERROR_PASSWORD_INVALID;
				/*write log*/
				Logs::getInstance()->insert(array(
					'user_ip' => Utils::getIp(),
					'user_agent' => $_SERVER['HTTP_USER_AGENT'],
					'log_action' => 'ADMINCP_LOGIN_FAIL',
					'log_message' => $this->username.' đăng nhập thất bại do sai mật khẩu'
				));
				break;
			}
			default:
			{
				$user = Users::getInstance()->get($result);
				//check if administrative role?
				$roles = Roles::getInstance()->getUserRoles($user['user_id'], array('role_is_admin'=>true), RETURN_NUMERIC_ARRAY);
				if(!empty($roles)){
					//load permissions
					$permissions = Permissions::getInstance()->getUserPermissions($user['user_id']);
					$allowedPermissions = array();
					foreach($permissions as $R){
						if($R['value'] == 1) array_push($allowedPermissions, $R['permission_name']);
					}
					
					//write to session
					$this->_id=$user['user_id'];
					$this->setState('username', $user['user_username']);
					$this->setState('last_login', date('Y-m-d H:i:s'));
					$this->setState('role', $roles);
					$this->setState('permissions', $allowedPermissions);				
					$this->_user=$user;
					$this->errorCode=self::ERROR_NONE;
		
					/*write log*/
					Yii::app()->db->createCommand()->update('tbl_users', array('user_last_login' => new CDbExpression('NOW()')), 'user_id=:id', array(':id' => $this->id));
					Logs::getInstance()->insert(array(
						'user_id' => $user['user_id'],
						'user_ip' => Utils::getIp(),
						'user_agent' => $_SERVER['HTTP_USER_AGENT'],
						'log_action' => 'ADMINCP_LOGIN_SUCCESS',
						'log_message' => $user['user_username'].' đăng nhập thành công'
					));
				}
			}
		}
        return !$this->errorCode;
    }
 
    public function getId()
    {
        return $this->_id;
    }
	
	 public function getUser()
    {
        return $this->_user;
    }
}